【実践】Cloud Functionsのセキュリティを強化!組織全体で外部アクセスを制御する方法を解説 #GoogleCloudセキュリティ
概要
今回はCloud Functionsの外部アクセスの設定について、組織で統一的に制御する方法について解説します。
方法としては、組織ポリシーという仕組みを使います。
こちらを簡単に説明すると、組織配下に存在するリソース全てにおいて、設定を強制させる仕組みです。
図にするとこんな感じです。
全てのVMインスタンスに外部IPの付与を禁止するというポリシーを適用させた場合の例です。(リソースについては点線で区別してます=直でポリシーは付与しないため)
今回使用する組織ポリシーは「constraints/cloudfunctions.allowedVpcConnectorEgressSettings」を使用して、サーバーレスVPCコネクタ経由でのみ、外部へのトラフィックを許可するといった設定を反映します。
以前にはCloud Runで、今回と似たような記事を書いているのでそちらも参考にしてください。
組織ポリシーでCloud Runの内部/外部アクセスを完全に制御する
設定手順
- 組織ポリシーを設定
- サーバレスVPCコネクターを作成
- 適応後の確認
1.組織ポリシーを設定
Allowed VPC Connector egress settings のポリシー設定
- 組織ポリシーを組織自体に付与するために組織に移動します
- [組織ポリシー]をコンソール画面で検索
- [フィルタ]から、[constraints/run.allowedVPCEgress]を検索し、押下します
- [ポリシーを管理]を押下する
- [カスタマイズ]→[置き換える]を選択する
- [ルールの追加]を押下する
- ポリシーの値を[カスタム]で選択
- [許可]を選択し、カスタム値に[ALL_TRAFFIC]と入力する
- 最後に[ポリシーを設定]を押下し完了
これで、Cloud Functions作成時に、サーバーレスVPCコネクタ経由でのみ外部にアクセスさせる、という設定が完了しました。
2.サーバレスVPCコネクターを作成
サーバレスVPCコネクターの作成画面
- [サーバーレス VPC アクセス]をコンソールで検索し、[コネクタを作成]から新規に作成します
- サブネットネットワークの指定
- サーバレスVPCコネクタ専用の/28サブネットが必要です
- このサブネットはVMやロードバランサなどの他のリソースでは使用できません
- [作成]で完了します
サブネットが他のリソースで使用されていないことを確認するには、下記のgcloudコマンドを使用して、サブネットのpurposeがPRIVATEであることを確認します。
gcloud compute networks subnets describe SUBNET_NAME
3.適応後の確認
Cloud Functionsの作成画面
実際にCloud Functionsの作成画面にて、組織ポリシーが適応されているかの確認を行います。(Cloud Functionsの説明は割愛します)
- [Cloud Functions]をコンソールで検索し、[ファンクションの作成]から新規に作成します
- 作成画面の1番下の▼内の、[接続]セクションに移動します
- 下り(外向き)設定のネットワークに、作成した[サーバーレスVPCコネクタ]を選択します
- プライベートIPへのリクエストだけをVPCコネクタ経由でルーティングするのグレーアウトを確認
- すべてのトラフィックをVPCコネクタ経由でルーティングするのチェックボックスのみ押下可能を確認
これで、新規に作成するCloud Functionsに関しては組織ポリシーで、外部アクセスを制御している事を確認できました。
まとめ
この後に、VPCのファイアウォールを設定して、ゲートウェイ(NATやプロキシサーバー)に向けた通信などのルールを作成する必要があります。
また、既存にあるCloud Functionsの設定には自動的に反映するということは出来ないようなので、再設定する必要があります。
今回はCloud Functionsに絞り解説しましたが、同様のポリシーが他リソースでも存在する場合、同じような構成を設定することも可能です。
Google Cloudを使用し、組織で一元的にリソースの設定値を管理したい場合には、組織ポリシーを検討しましょう。